#include <head.h>
// void *(*__start_routine)(void *)//回调函数
// 一个进程可以有多个线程，必须等线程结束进程才能结束

// 多个参数的线程
typedef struct data
{

  int id;
  char name[128];

} data;

void *Func_duo(void *arg)
{
  // 参数装换
  data student = *((data *)arg);
  printf("我是多个参数的线程");
  printf("id=%d,name=%s\n", student.id, student.name);
}

void *Func_wucan(void *arg)
{
  printf("我是无参的线程\n");
}

void *Func_youcan(void *arg)
{
  // 参数装换
  int sock = *((int *)arg);
  printf("我是整数有参\n");
  printf("sock=%d\n", sock);
}

void *Func_string(void *arg)
{
  // 参数装换
  char *buf = (char *)arg;
  printf("我是字符串有参线程\n");
  printf("buf=%s", buf);
}

int main(int argc, char const *argv[])
{

  // 声明一个线程号
  pthread_t tid;
  // 无参
  pthread_create(&tid, NULL, Func_wucan, NULL);

  // 有一个参数 整数
  int sock = 10;
  pthread_create(&tid, NULL, Func_youcan, (void *)&sock);

  // 有一个参数 字符串
  char buff[128] = "键盘敲烂，工资上万\n";
  pthread_create(&tid, NULL, Func_string, (void *)buff);

  // 有多个参数的线程
  data person = {.id = 37, .name = "杨晓瑄"};
  pthread_create(&tid, NULL, Func_duo, (void *)&person);

  sleep(1);
  return 0;
}